#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int cmp(int a,int b){
    return a>b;
}

signed main()
{
    int N;
    cin>>N;
    int m,n;
    for(int i=1;i*i<=N;i++){
        if(N/i==N*1.0/i)    n = i;
    }
    m = N/n;
    vector<int> v(N);
    int cnt = 0;
    for(int i=0;i<N;i++){
        cin>>v[i];
    }
    sort(v.begin(),v.end(),cmp);
    int level = m/2+m%2;
    vector<vector<int>> ans(m,vector<int>(n));
    for(int i=0;i<level;i++){
        for(int j=i;j<n-i&&cnt<N;j++){
            ans[i][j] = v[cnt++];
        }
        for(int j=i+1;j<m-i-1&&cnt<N;j++){
            ans[j][n-i-1] = v[cnt++];
        }
        for(int j=n-i-1;j>=i&&cnt<N;j--){
            ans[m-i-1][j] = v[cnt++];
        }
        for(int j=m-i-2;j>i&&cnt<N;j--){
            ans[j][i] = v[cnt++];
        }
    }
    for(int i=0;i<m;i++){
        cout<<ans[i][0];
        for(int j=1;j<n;j++){
            cout<<" "<<ans[i][j];
        }
        cout<<"\n";
    }
    return 0;
}
